﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Windows.Forms;
using VideoClub.Entities;

namespace VideoClub.DataAccess
{
    internal class SocioDAO
    {

        #region ObtenerTodosLosSocios
        public static List<SocioView> ObtenerTodosLosSocios()
        {
            List<SocioView> list = new List<SocioView>();

            using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
            {
                conn.Open();

                string sql = @"SELECT *, td.DESCRIPCION as 'TipoDocumento', ba.DESCRIPCION as 'Barrio' FROM dbo.SOCIOS so
                                INNER JOIN dbo.TIPO_DOC td ON(td.ID_TIPO_DOC = so.ID_TIPO_DOC)
                                INNER JOIN	dbo.BARRIOS ba ON (ba.ID_BARRIOS = so.ID_BARRIOS)";
                SqlCommand cmd = new SqlCommand(sql, conn);

                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    list.Add(LoadSocioView(reader));
                }
            }

            return list;
        }

        #endregion

        #region ObtenerSocioPorId

        public static Socio ObtenerSocioPorId(int id)
        {
            Socio socio = null;

            using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
            {
                conn.Open();

                string sql = @"SELECT *, td.DESCRIPCION as 'TipoDocumento', ba.DESCRIPCION as 'Barrio' FROM dbo.SOCIOS so
                                INNER JOIN dbo.TIPO_DOC td ON(td.ID_TIPO_DOC = so.ID_TIPO_DOC)
                                INNER JOIN	dbo.BARRIOS ba ON (ba.ID_BARRIOS = so.ID_BARRIOS) WHERE Id_Socio = @socioId";

                var cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("socioId", id);

                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.Read())
                {
                    socio = LoadSocio(reader);
                }
                conn.Close();
            }

            return socio;

        }
        #endregion

        #region EliminarActor
        public static Boolean Eliminar(int id)
        {
            try
            {
                using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
                {
                    conn.Open();
                    string sql = @" DELETE FROM socios WHERE Id_Socio = @socioId ";
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("socioId", id);
                    cmd.ExecuteScalar();
                    conn.Close();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
                throw;
            }

        }

        #endregion

        #region ValidarExistencia
        public static bool ValidarExistencia(int documento)
        {
            int nrorecord = 0;

            using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
            {
                conn.Open();

                string sql = @"SELECT Count(*) FROM Socios WHERE DOCUMENTO=@documento";

                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("documento", documento);
                nrorecord = Convert.ToInt32(cmd.ExecuteScalar());
                conn.Close();
            }

            return nrorecord > 0;
        }
        #endregion

        #region InsertarActor

        public static Socio Insertar(Socio socio)
        {
            using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
            {
                conn.Open();

                String sql = @"INSERT INTO SOCIOS
                                ( FECHA_NACIMIENTO ,
                                  NOMBRE ,
                                  APELLIDO ,
                                  CALLE ,
                                  ALTURA ,
                                  NUMERO_TELEFONO ,
                                  EMAIL ,
                                  FECHA_INGRESO ,
                                  DOCUMENTO ,
                                  ID_BARRIOS ,
                                  ID_TIPO_DOC
                                )
                                VALUES  ( 
                                  @FechaNacimiento , 
                                  @Nombre , 
                                  @Apellido , 
                                  @Calle , 
                                  @Altura , 
                                  @Telefono , 
                                  @Email , 
                                  @FechaIngreso , 
                                  @Documento , 
                                  @IdBarrio , 
                                  @IdTipoDocumento 
                                )";

                SqlCommand cmd = new SqlCommand(sql, conn);

                cmd.Parameters.AddWithValue("@FechaNacimiento", socio.pfechaNacimiento);
                cmd.Parameters.AddWithValue("@Nombre", socio.pnombre);
                cmd.Parameters.AddWithValue("@Apellido", socio.papellido);
                cmd.Parameters.AddWithValue("@Calle", socio.pcalle);
                cmd.Parameters.AddWithValue("@Altura", socio.paltura);
                cmd.Parameters.AddWithValue("@Telefono", socio.pnumeroTelefono);
                cmd.Parameters.AddWithValue("@Email", socio.pemail);
                cmd.Parameters.AddWithValue("@FechaIngreso", socio.pfechaIngreso);
                cmd.Parameters.AddWithValue("@Documento", socio.pdocumento);
                cmd.Parameters.AddWithValue("@IdBarrio", socio.pbarrio.pidBarrio);
                cmd.Parameters.AddWithValue("@IdTipoDocumento", socio.ptipoDocumento.pidTipoDocumento);

                socio.pidSocio = Convert.ToInt32(cmd.ExecuteScalar());
                conn.Close();
            }

            return socio;
        }
        #endregion

        #region ModificarActor

//        public static Socio Actualizar(Socio socio)
//        {
//            using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
//            {
//                conn.Open();

//                string sql = @"UPDATE Actores SET  
//                                            Nombre = @Nombre, 
//                                            Apellido = @Apellido 
//                                    WHERE IdActor = @idActor";

//                SqlCommand cmd = new SqlCommand(sql, conn);

//                cmd.Parameters.AddWithValue("@Nombre", actor.pnombre);
//                cmd.Parameters.AddWithValue("@Apellido", actor.papellido);
//                cmd.Parameters.AddWithValue("@idActor", actor.pidActor);
//                cmd.ExecuteNonQuery();

//            }

//            return actor;
//        }

        #endregion

        #region LoadActor

        private static SocioView LoadSocioView(IDataReader reader)
        {
            try
            {
                SocioView socioView= new SocioView();
                Socio socio = new Socio();
                socio.pbarrio = new Barrio();
                socio.ptipoDocumento = new TipoDocumento();

                socio.pidSocio = socioView.pidSocio = Convert.ToInt32(reader["Id_Socio"]);
                socio.pfechaNacimiento = socioView.pfechaNacimiento = Convert.ToDateTime(reader["Fecha_Nacimiento"]);
                socio.pnombre = socioView.pnombre = Convert.ToString(reader["Nombre"]);
                socio.papellido = socioView.papellido = Convert.ToString(reader["Apellido"]);
                socio.pcalle = socioView.pcalle = Convert.ToString(reader["Calle"]);
                socio.paltura = socioView.paltura = Convert.ToInt32(reader["Altura"]);
                socio.pnumeroTelefono =socioView.pnumeroTelefono = Convert.ToInt32(reader["Numero_Telefono"]);
                socio.pemail = socioView.pemail = Convert.ToString(reader["Email"]);
                socio.pfechaIngreso = socioView.pfechaIngreso = Convert.ToDateTime(reader["Fecha_Ingreso"]);
                socio.pdocumento = socioView.pdocumento = Convert.ToInt32(reader["Documento"]);
                socio.pbarrio.pidBarrio = Convert.ToInt32(reader["Id_Barrios"]);
                socio.pbarrio.pnombre = socioView.pnombreBarrioView = Convert.ToString(reader["Barrio"]);
                socio.ptipoDocumento.pidTipoDocumento = Convert.ToInt32(reader["Id_Tipo_Doc"]);
                socio.ptipoDocumento.pdescripcion = socioView.pnombreTipoDocumentoView = Convert.ToString(reader["TipoDocumento"]);

                return socioView;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message.ToString());
                
                throw;
            }
            
        }
        #endregion

        private static Socio LoadSocio(IDataReader reader)
        {
            try
            {
                SocioView socioView = new SocioView();
                Socio socio = new Socio();
                socio.pbarrio = new Barrio();
                socio.ptipoDocumento = new TipoDocumento();


                socio.pidSocio = socioView.pidSocio = Convert.ToInt32(reader["Id_Socio"]);
                socio.pfechaNacimiento = socioView.pfechaNacimiento = Convert.ToDateTime(reader["Fecha_Nacimiento"]);
                socio.pnombre = socioView.pnombre = Convert.ToString(reader["Nombre"]);
                socio.papellido = socioView.papellido = Convert.ToString(reader["Apellido"]);
                socio.pcalle = socioView.pcalle = Convert.ToString(reader["Calle"]);
                socio.paltura = socioView.paltura = Convert.ToInt32(reader["Altura"]);
                socio.pnumeroTelefono = socioView.pnumeroTelefono = Convert.ToInt32(reader["Numero_Telefono"]);
                socio.pemail = socioView.pemail = Convert.ToString(reader["Email"]);
                socio.pfechaIngreso = socioView.pfechaIngreso = Convert.ToDateTime(reader["Fecha_Ingreso"]);
                socio.pdocumento = socioView.pdocumento = Convert.ToInt32(reader["Documento"]);
                socio.pbarrio.pidBarrio = Convert.ToInt32(reader["Id_Barrios"]);
                socio.pbarrio.pnombre = socioView.pnombreBarrioView = Convert.ToString(reader["Barrio"]);
                socio.ptipoDocumento.pidTipoDocumento = Convert.ToInt32(reader["Id_Tipo_Doc"]);
                socio.ptipoDocumento.pdescripcion = socioView.pnombreTipoDocumentoView = Convert.ToString(reader["TipoDocumento"]);

                return socio;
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message.ToString());

                throw;
            }

        }

        //public static List<Actor> ObtenerActorPorFiltro(string filtro)
        //{
        //    List<Actor> list = new List<Actor>();
        //    using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
        //    {
        //        conn.Open();

        //        string sql = @"SELECT IdActor ,Nombre ,Apellido  FROM actores WHERE Apellido Like '%" + filtro + "%'";

        //        SqlCommand cmd = new SqlCommand(sql, conn);
        //        cmd.Parameters.AddWithValue("apellido", filtro);
        //        SqlDataReader reader = cmd.ExecuteReader();

                
        //        while (reader.Read())
        //        {
        //            list.Add(LoadActor(reader));
        //        }
        //        conn.Close();
        //    }
        //    return list;
        //}

        internal static Socio Actualizar(Socio socio)
        {
            using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=VideoClub;Integrated Security=True"))
            {
                conn.Open();

                string sql = @"UPDATE SOCIOS SET  
                                              FECHA_NACIMIENTO = @Fecha,
                                              NOMBRE = @Nombre,
                                              APELLIDO = @Apellido,
                                              CALLE = @Calle,
                                              ALTURA = @Altura,
                                              NUMERO_TELEFONO = @NumeroTel,
                                              EMAIL = @Email ,
                                              DOCUMENTO = @Documento,
                                              ID_BARRIOS = @IdBarrio,
                                              ID_TIPO_DOC = @IdTipoDoc
                                Where Id_Socio =@Id ";

                SqlCommand cmd = new SqlCommand(sql, conn);

                cmd.Parameters.AddWithValue("@Id", socio.pidSocio);
                cmd.Parameters.AddWithValue("@Fecha", socio.pfechaNacimiento);
                cmd.Parameters.AddWithValue("@Nombre", socio.pnombre);
                cmd.Parameters.AddWithValue("@Apellido", socio.papellido);
                cmd.Parameters.AddWithValue("@Calle", socio.pcalle);
                cmd.Parameters.AddWithValue("@Altura", socio.paltura);
                cmd.Parameters.AddWithValue("@NumeroTel", socio.pnumeroTelefono);
                cmd.Parameters.AddWithValue("@Email", socio.pemail);
                cmd.Parameters.AddWithValue("@Documento", socio.pdocumento);
                cmd.Parameters.AddWithValue("@IdBarrio", socio.pbarrio.pidBarrio);
                cmd.Parameters.AddWithValue("@IdTipoDoc", socio.ptipoDocumento.pidTipoDocumento);
                cmd.ExecuteNonQuery();

            }

            return socio;
        }
    }
}

